在请求当中,请求上下文保持对请求层级的数据的追踪。相比在请求当中把请求对象传递到每个函数当中,Flask 使用了 request 与 session 代理对象来访问请求对象。
This is similar to 应用上下文, which keeps track of theapplication-level data independent of a request. A correspondingapplication context is pushed when a request context is pushed.
上下文的目的¶当 Flask 应用处理请求,根据从 WSGI 服务器获取到的环境,创建出相应的 Request 对象。因为 工作者 (根据不同的服务器可能为线程,进程或协程)一次只能处理一个请求,在请求当中,请求数据可以认为对工作者全局可见、Flask 用术语 上下文局部变量(context local) 来表示这种设计。
Flask 在处理请求时,会自动 推入 请求上下文。视图函数,错误处理钩子函数与其他在请求当中运行的函数可以访问指向当前请求的请求对象代理对象 request。
上下文的生命周期¶When a Flask application begins handling a request, it pushes a requestcontext, which also pushes an app context. When therequest ends it pops the request context then the application context.
每个线程(或者其他工作者类型)的上下文是独立的。request 不能传入其他线程,其他线程有不同的上下文栈,因此不会知道父线程会指向哪个请求。
上下文局部变量的实现在 Werkzeug 中。若要了解